﻿using System;
using System.Linq;
using System.Data.Entity;
using System.Collections.Generic;
using PharmacyPharnet.Core;
using Pharmacy.Data;
using Pharmacy.Ultilities;
using Pharmacy.Data.Repositories;
using Pharmacy.Data.Entity;
using PharmacyPharnet.Core.Entity;
using System.Windows.Forms;
using Pharmacy.ExceptionHandling;
using DevExpress.XtraEditors.Controls;
using Pharmacy.Business;
using DevExpress.XtraGrid;
using Pharmacy.Ultilities.BaseEventArgs;
using DevExpress.XtraGrid.Views.Grid.ViewInfo;
using Pharmacy.Ultilities.Resources;
using System.Data.Objects.DataClasses;
using System.Drawing;
using DevExpress.XtraEditors.Repository;

namespace PharmacyPharnet.MasterData
{
    public partial class FrmUnitOfMeasureGroup : FrmEditBase
    {
        #region Declarations
        IObjectContext pharmacyContext;
        UnitOfMeasureGroupDetailRepository rUnitOfMeasureGroupDetail;
        UnitOfMeasureRepository rUnitOfMeasure;
        UnitOfMeasureInfoCollection lstUnitOfMeasureInfo;
        UnitOfMeasurGroupBO uomGroupBO;
        UnitOfMeasureGroup currentUOMGroup;
        public delegate void RowSelectedEventHandler(object sender, RowSelectedArgs e);
        public event RowSelectedEventHandler RowSelected;
        #endregion

        #region Constructors
        public FrmUnitOfMeasureGroup()
        {
            InitializeComponent();
        }

        public FrmUnitOfMeasureGroup(IObjectContext objectContext)
            : this()
        {
            pharmacyContext = objectContext;
        }
        #endregion

        #region Override Methods
        protected override void InitializeBO()
        {
            if (pharmacyContext == null)
                pharmacyContext = ObjectContextFactory.CreatePharmacyContext(Global.UserName, Global.CurrentConnectionString);
            if (uomGroupBO == null)
                uomGroupBO = new UnitOfMeasurGroupBO(pharmacyContext);
        }

        protected override void PopulateData()
        {
            BindUOMGroupDetailToGrid();
            BindUOMToListCheckBox();
            lstUnitOfMeasureInfo = new UnitOfMeasureInfoCollection();
        }
        #endregion

        #region Custom Methods

        /// <summary>
        /// Xử lý các control khi thay đổi status của form
        /// </summary>
        private void ActionChange()
        {
            grdUOMGroup.Enabled = true;
            pnlBottom.Enabled = true;
            if (CurrentAction == Enums.ActionForm.Edit)
                grdUOMGroup.Enabled = false;
            else if (CurrentAction == Enums.ActionForm.None)
                pnlBottom.Enabled = false;
        }

        /// <summary>
        /// Load dữ liệu UOMGroupDetail vào gridcontrol
        /// </summary>
        private void BindUOMGroupDetailToGrid()
        {
            rUnitOfMeasureGroupDetail = new UnitOfMeasureGroupDetailRepository(pharmacyContext, MergeOption.Overrive);
            grdUOMGroup.DataSource = rUnitOfMeasureGroupDetail.AsQueryable().ToList();
            grvUOMGroup.BestFitColumns();
        }

        /// <summary>
        /// Load dữ liệu UnitOfMeasure vào list checkbox
        /// </summary>
        private void BindUOMToListCheckBox()
        {
            rUnitOfMeasure = new UnitOfMeasureRepository(pharmacyContext, MergeOption.Overrive);
            List<UnitOfMeasure> lstUnitOfMeasure = rUnitOfMeasure.AsQueryable().ToList();
            foreach (UnitOfMeasure uom in lstUnitOfMeasure)
            {
                chklUnitOfMeasure.Items.Add(uom.ID, uom.Name);
            }
        }

        /// <summary>
        /// Bind dữ liệu từ List<UnitOfMeasureInfo> vào UOMGroup gridcontrol new
        /// </summary>
        private void BindUOMGroupToNewUOMGroupGrid()
        {
            grdNewUOMGroup.DataSource = null;
            grdNewUOMGroup.DataSource = lstUnitOfMeasureInfo;
            grvNewUOMGroup.RefreshData();
        }

        /// <summary>
        /// Tạo mới UnitOfMeasureInfo và add vào List<UnitOfMeasureInfo>.
        /// Chuyển item từ list checkbox qua UOMGroup gridcontrol new
        /// </summary>
        /// <param name="isAll"></param>
        private void AddItemToNewGrid(bool isAll)
        {
            if (chklUnitOfMeasure.Items.Count > 0)
            {
                UnitOfMeasureInfo uomInfo;
                int index = lstUnitOfMeasureInfo.Count;
                int count = chklUnitOfMeasure.Items.Count;
                CheckedListBoxItem item;
                for (int i = count - 1; i >= 0; i--)
                {
                    item = chklUnitOfMeasure.Items[i];
                    if (item.CheckState == CheckState.Checked || isAll == true)
                    {
                        uomInfo = new UnitOfMeasureInfo(Convert.ToInt32(item.Value), item.Description, 100, index++, 0);
                        lstUnitOfMeasureInfo.Add(uomInfo);
                        chklUnitOfMeasure.Items.Remove(item);
                    }
                }

                BindUOMGroupToNewUOMGroupGrid();
            }

        }

        /// <summary>
        /// Reset số thứ tự của item trong List<UnitOfMeasureInfo> theo tiêu chí:
        /// item trên cùng có số thự lớn nhất , và item cuối cùng có số thứ tự nhỏ nhất (base item)
        /// </summary>
        private void ResetSequenceNo()
        {
            int index = 1;
            if (lstUnitOfMeasureInfo != null && lstUnitOfMeasureInfo.Count > 0)
            {
                UnitOfMeasureInfo uomInfo;
                for (int i = lstUnitOfMeasureInfo.Count - 1; i >= 0; i--)
                {
                    uomInfo = lstUnitOfMeasureInfo[i];
                    uomInfo.SequenceNo = index++;
                }
            }
        }

        /// <summary>
        /// Chuyển item từ  UOMGroup gridcontrol new qua list checkbox
        /// </summary>
        /// <param name="isAll"></param>
        private void SubtractItemFromNewGrid(bool isAll)
        {
            if (lstUnitOfMeasureInfo.Count > 0)
            {
                UnitOfMeasureInfo uomInfo;
                int count = lstUnitOfMeasureInfo.Count;
                for (int i = count - 1; i >= 0; i--)
                {
                    uomInfo = lstUnitOfMeasureInfo[i];
                    if (uomInfo.Selected == true || isAll == true)
                    {
                        lstUnitOfMeasureInfo.RemoveAt(i);
                        chklUnitOfMeasure.Items.Add(uomInfo.Id, uomInfo.Name);
                    }
                }

                BindUOMGroupToNewUOMGroupGrid();
            }

        }

        /// <summary>
        /// Di Chuyển item lên trên
        /// </summary>
        private void MoveItemUp()
        {
            int count = lstUnitOfMeasureInfo.Count;
            UnitOfMeasureInfo uomCurrent;
            UnitOfMeasureInfo uomPrev;
            bool hasSelectedItem = false;
            for (int i = 1; i < count; i++)
            {
                uomCurrent = lstUnitOfMeasureInfo[i];
                if (uomCurrent.Selected)
                {
                    uomPrev = lstUnitOfMeasureInfo[i - 1];
                    if (uomPrev.Selected == false)
                    {
                        lstUnitOfMeasureInfo[i - 1] = uomCurrent;
                        lstUnitOfMeasureInfo[i] = uomPrev;
                        hasSelectedItem = true;
                    }
                }
            }
            if (hasSelectedItem)
            {
                BindUOMGroupToNewUOMGroupGrid();
                ResetSequenceNo();
            }
        }

        /// <summary>
        /// Di chuyển item xuống
        /// </summary>
        private void MoveItemDown()
        {
            int count = lstUnitOfMeasureInfo.Count;
            UnitOfMeasureInfo uomCurrent;
            UnitOfMeasureInfo uomPrev;
            bool hasSelectedItem = false;
            for (int i = count - 2; i >= 0; i--)
            {
                uomCurrent = lstUnitOfMeasureInfo[i];
                if (uomCurrent.Selected)
                {
                    uomPrev = lstUnitOfMeasureInfo[i + 1];
                    if (uomPrev.Selected == false)
                    {
                        lstUnitOfMeasureInfo[i + 1] = uomCurrent;
                        lstUnitOfMeasureInfo[i] = uomPrev;
                        hasSelectedItem = true;
                    }
                }
            }
            if (hasSelectedItem)
            {
                BindUOMGroupToNewUOMGroupGrid();
                ResetSequenceNo();
            }
        }

        /// <summary>
        /// Lưu lại UOMGroup
        /// </summary>
        private void Save()
        {
            BindDataToObject();
            if(CurrentAction == Enums.ActionForm.New)
                uomGroupBO.CreateNewUnitOfMeasureGroup(currentUOMGroup);
            else if(CurrentAction == Enums.ActionForm.Edit)
                uomGroupBO.SaveUnitOfMeasureGroup(currentUOMGroup);
            BindUOMGroupDetailToGrid();
            Clear();
            CurrentAction = Enums.ActionForm.None;

        }

        /// <summary>
        /// Xóa thông tin trong phần new/edit UOMGroup
        /// </summary>
        private void Clear()
        {
            lstUnitOfMeasureInfo.Clear();
            chklUnitOfMeasure.Items.Clear();
            currentUOMGroup = null;
            BindUOMToListCheckBox();
            BindUOMGroupToNewUOMGroupGrid();
        }


        /// <summary>
        /// Set dữ liệu của control vào UOMGroup trước khi lưu.
        /// </summary>
        private void BindDataToObject()
        {
            if (currentUOMGroup == null)
                currentUOMGroup = new UnitOfMeasureGroup();
            UnitOfMeasureGroupDetail uomGroupDetail;
            int uomGroupParentID = 0;
            string code = string.Empty;
            if (lstUnitOfMeasureInfo.Count > 0)
            {
                if (CurrentAction == Enums.ActionForm.New)
                {
                    foreach (UnitOfMeasureInfo uomInfo in lstUnitOfMeasureInfo)
                    {
                        uomGroupDetail = new UnitOfMeasureGroupDetail();
                        uomGroupDetail.RatePrice = uomInfo.RatePrice / 100;
                        uomGroupDetail.SequenceNo = uomInfo.SequenceNo;
                        uomGroupDetail.UnitOfMeasure = rUnitOfMeasure.AsQueryable().Where(uom => uom.ID == uomInfo.Id).First();
                        uomGroupDetail.ParentID = uomGroupParentID;
                        uomGroupParentID = uomInfo.Id;
                        currentUOMGroup.UnitOfMeasureGroupDetails.Add(uomGroupDetail);
                        code += uomInfo.Name + "/";
                    }
                    code = code.Remove(code.Length - 1, 1);
                    currentUOMGroup.Code = code;
                    currentUOMGroup.Note = code;
                    currentUOMGroup.NumberOfDetails = lstUnitOfMeasureInfo.Count;
                }
                else // trường hợp edit
                {
                    List<UnitOfMeasureGroupDetail> lstUOMGroupDetail = currentUOMGroup.UnitOfMeasureGroupDetails.ToList();
                    rUnitOfMeasureGroupDetail.Delete(lstUOMGroupDetail);                        
                    foreach (UnitOfMeasureInfo uomInfo in lstUnitOfMeasureInfo)
                    {
                        uomGroupDetail = new UnitOfMeasureGroupDetail();
                        currentUOMGroup.UnitOfMeasureGroupDetails.Add(uomGroupDetail);
                        uomGroupDetail.RatePrice = uomInfo.RatePrice / 100;
                        uomGroupDetail.SequenceNo = uomInfo.SequenceNo;
                        uomGroupDetail.UnitOfMeasure = rUnitOfMeasure.AsQueryable().Where(uom => uom.ID == uomInfo.Id).First();
                        uomGroupDetail.ParentID = uomGroupParentID;
                        uomGroupParentID = uomInfo.Id;
                        code += uomInfo.Name + "/";
                    }
                    currentUOMGroup.Code = code.Remove(code.Length - 1, 1);
                    currentUOMGroup.NumberOfDetails = lstUnitOfMeasureInfo.Count;
                }
            }
        }

        /// <summary>
        /// Set giá trị của UOMGroup vào control khi edit.
        /// </summary>
        private void BindDataToControls()
        {
            if (currentUOMGroup != null && CurrentAction == Enums.ActionForm.Edit)
            {
                if (lstUnitOfMeasureInfo == null)
                    lstUnitOfMeasureInfo = new UnitOfMeasureInfoCollection();
                lstUnitOfMeasureInfo.Clear();
                UnitOfMeasureInfo uomInfo;
                UnitOfMeasure uom;
                foreach (UnitOfMeasureGroupDetail uomGroupDetail in currentUOMGroup.UnitOfMeasureGroupDetails)
                {
                    uom = uomGroupDetail.UnitOfMeasure;
                    uomInfo = new UnitOfMeasureInfo(uom.ID, uom.Name, uomGroupDetail.RatePrice.Value * 100, uomGroupDetail.SequenceNo.Value, uomGroupDetail.ParentID.Value);
                    lstUnitOfMeasureInfo.Add(uomInfo);
                    // Remove Item out of list checkbox
                    chklUnitOfMeasure.SelectedValue = uom.ID;
                    chklUnitOfMeasure.Items.Remove(chklUnitOfMeasure.SelectedItem);
                }
                BindUOMGroupToNewUOMGroupGrid();
            }
        }

        /// <summary>
        /// Validate data before deleting
        /// </summary>
        private bool ValidateUOMGroup()
        {
            if (currentUOMGroup.NumberOfDetails == 1)
            {
                MessageBox.Show("Không thể xóa nhóm đơn vị cơ bản.");
                return false;
            }
            foreach (Item_UOM item in currentUOMGroup.Item_UOM)
            {
                if (item.MasterItem != null)
                {
                    MessageBox.Show(SR.Instance.GetString(Constant.KEY_DELETEOBJECTINTRANSACTION));
                    return false;
                }
            }
            return true;
        }

        /// <summary>
        /// Validate data before editing
        /// </summary>
        private bool ValidateUOMGroupBeforeEdting()
        {
            if (currentUOMGroup.NumberOfDetails == 1)
            {
                MessageBox.Show("Không thể chỉnh sửa nhóm đơn vị cơ bản.");
                return false;
            }
            foreach (Item_UOM item in currentUOMGroup.Item_UOM)
            {
                if (item.MasterItem != null)
                {
                    MessageBox.Show(string.Format("Nhóm đơn vị tính {0} đã được sử dụng. Bạn không thể chỉnh sửa.", currentUOMGroup.Code));
                    return false;
                }
            }
            return true;
        }
        #endregion

        #region Event Handlers
        private void btnNavigationRight_Click(object sender, EventArgs e)
        {
            try
            {
                AddItemToNewGrid(false);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi xảy ra. Vui lòng liên hệ Người quản trị hệ thống để được hỗ trợ.");
                ExceptionHandler.LogWriter.Write(ex, ExceptionHandler.LOG_CAT_GENERAL);
            }
        }

        private void btnNavigationRightAll_Click(object sender, EventArgs e)
        {
            try
            {
                AddItemToNewGrid(true);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi xảy ra. Vui lòng liên hệ Người quản trị hệ thống để được hỗ trợ.");
                ExceptionHandler.LogWriter.Write(ex, ExceptionHandler.LOG_CAT_GENERAL);
            }
        }

        private void btnNavigationLeftAll_Click(object sender, EventArgs e)
        {
            try
            {
                SubtractItemFromNewGrid(true);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi xảy ra. Vui lòng liên hệ Người quản trị hệ thống để được hỗ trợ.");
                ExceptionHandler.LogWriter.Write(ex, ExceptionHandler.LOG_CAT_GENERAL);
            }
        }

        private void btnNavigationLeft_Click(object sender, EventArgs e)
        {
            try
            {
                SubtractItemFromNewGrid(false);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi xảy ra. Vui lòng liên hệ Người quản trị hệ thống để được hỗ trợ.");
                ExceptionHandler.LogWriter.Write(ex, ExceptionHandler.LOG_CAT_GENERAL);
            }
        }

        private void btnUp_Click(object sender, EventArgs e)
        {
            try
            {
                MoveItemUp();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi xảy ra. Vui lòng liên hệ Người quản trị hệ thống để được hỗ trợ.");
                ExceptionHandler.LogWriter.Write(ex, ExceptionHandler.LOG_CAT_GENERAL);
            }
        }

        private void btnDown_Click(object sender, EventArgs e)
        {
            try
            {
                MoveItemDown();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi xảy ra. Vui lòng liên hệ Người quản trị hệ thống để được hỗ trợ.");
                ExceptionHandler.LogWriter.Write(ex, ExceptionHandler.LOG_CAT_GENERAL);
            }
        }

        private void btnNew_Click(object sender, EventArgs e)
        {
            try
            {
                CurrentAction = Enums.ActionForm.New;
                ActionChange();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi xảy ra. Vui lòng liên hệ Người quản trị hệ thống để được hỗ trợ.");
                ExceptionHandler.LogWriter.Write(ex, ExceptionHandler.LOG_CAT_GENERAL);
            }
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            try
            {
                Clear();
                CurrentAction = Enums.ActionForm.None;
                ActionChange();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi xảy ra. Vui lòng liên hệ Người quản trị hệ thống để được hỗ trợ.");
                ExceptionHandler.LogWriter.Write(ex, ExceptionHandler.LOG_CAT_GENERAL);
            }
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            try
            {
                this.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi xảy ra. Vui lòng liên hệ Người quản trị hệ thống để được hỗ trợ.");
                ExceptionHandler.LogWriter.Write(ex, ExceptionHandler.LOG_CAT_GENERAL);
            }
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                Save();
                Clear();
                CurrentAction = Enums.ActionForm.None;
                ActionChange();
                BindUOMGroupDetailToGrid();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi xảy ra. Vui lòng liên hệ Người quản trị hệ thống để được hỗ trợ.");
                ExceptionHandler.LogWriter.Write(ex, ExceptionHandler.LOG_CAT_GENERAL);
            }
        }

        void btnDelete_Click(object sender, EventArgs e)
        {
            try
            {
                if (currentUOMGroup != null && ValidateUOMGroup() == true)
                {
                    uomGroupBO.DeleteUnitOfMeasureGroup(currentUOMGroup);
                    CurrentAction = Enums.ActionForm.None;
                    ActionChange();
                    currentUOMGroup = null;
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi xảy ra. Vui lòng liên hệ Người quản trị hệ thống để được hỗ trợ.");
                ExceptionHandler.LogWriter.Write(ex, ExceptionHandler.LOG_CAT_GENERAL);
            }
        }

        private void FrmUnitOfMeasureGroup_Load(object sender, EventArgs e)
        {
            try
            {
                CurrentAction = Enums.ActionForm.New;

                btnCancel.Click += new EventHandler(btnCancel_Click);
                btnClose.Click += new EventHandler(btnClose_Click);
                btnDelete.Click += new EventHandler(btnDelete_Click);
                btnSave.Click += new EventHandler(btnSave_Click);
                btnNew.Click += new EventHandler(btnNew_Click);                

                // Set image for Delete button
                Image img = Image.FromFile(IOHelper.CombinePath(IOHelper.ExecutePath, @"Images\delete.png"));
                btnDeleteUOMGroup.Buttons[0].Kind = DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph;
                btnDeleteUOMGroup.Buttons[0].Image = img.GetThumbnailImage(18, 18, null, IntPtr.Zero);

                // Set image for Edit button
                img = Image.FromFile(IOHelper.CombinePath(IOHelper.ExecutePath, @"Images\edit.png"));
                btnEditUOMGroup.Buttons[0].Kind = DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph;
                btnEditUOMGroup.Buttons[0].Image = img.GetThumbnailImage(18, 18, null, IntPtr.Zero);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi xảy ra. Vui lòng liên hệ Người quản trị hệ thống để được hỗ trợ.");
                ExceptionHandler.LogWriter.Write(ex, ExceptionHandler.LOG_CAT_GENERAL);
            }
        }

        private void grvUOMGroup_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
        {
            try
            {
                if (e.Info.IsRowIndicator)
                {
                    if (e.RowHandle != GridControl.NewItemRowHandle && e.RowHandle != GridControl.AutoFilterRowHandle)
                    {
                        if (e.RowHandle < 0)
                        {
                            e.Info.DisplayText = "";
                        }
                        else
                        {
                            e.Info.DisplayText = (e.RowHandle + 1).ToString();
                        }
                    }
                    if (e.RowHandle == GridControl.AutoFilterRowHandle)
                    {
                        e.Info.ImageIndex = -1;
                        e.Info.DisplayText = "Filter";
                    }
                }
            }
            catch (Exception ex)
            {

                ExceptionHandler.LogWriter.Write(ex.Message, ExceptionHandler.LOG_CAT_GENERAL);
                MessageBox.Show(ex.Message);
            }
        }

        private void grvNewUOMGroup_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
        {
            try
            {
                if (e.Info.IsRowIndicator)
                {
                    if (e.RowHandle != GridControl.NewItemRowHandle && e.RowHandle != GridControl.AutoFilterRowHandle)
                    {
                        if (e.RowHandle < 0)
                        {
                            e.Info.DisplayText = "";
                        }
                        else
                        {
                            e.Info.DisplayText = (e.RowHandle + 1).ToString();
                        }
                    }
                    if (e.RowHandle == GridControl.AutoFilterRowHandle)
                    {
                        e.Info.ImageIndex = -1;
                        e.Info.DisplayText = "Filter";
                    }
                }
            }
            catch (Exception ex)
            {

                ExceptionHandler.LogWriter.Write(ex.Message, ExceptionHandler.LOG_CAT_GENERAL);
                MessageBox.Show(ex.Message);
            }
        }

        private void spnRatePrice_CustomDisplayText(object sender, CustomDisplayTextEventArgs e)
        {
            decimal d;
            if (decimal.TryParse(e.Value.ToString(), out d))
            {
                e.DisplayText = (d / 100).ToString("P2"); //ConfigManager.DIOConfig.PercentStringFormat.ToUpper());
                //else
                //{
                //    e.DisplayText = (d / 100).ToString("P2");
                //}
            }
        }

        private void grdUOMGroup_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                UnitOfMeasureGroup item = grvUOMGroup.GetRow(grvUOMGroup.FocusedRowHandle) as UnitOfMeasureGroup;
                if (item == null)
                {
                    return;
                }
                GridHitInfo ghi = grvUOMGroup.CalcHitInfo((e as MouseEventArgs).Location);
                if (!ghi.InRow)
                {
                    return;
                }

                RowSelectedArgs args = new RowSelectedArgs();
                args.CurrentSelectedRowID = Convert.ToInt32(item.ID);
                if (RowSelected != null)
                {
                    RowSelected(sender, args);
                    btnClose.PerformClick();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi xảy ra. Vui lòng liên hệ Người quản trị hệ thống để được hỗ trợ.");
                ExceptionHandler.LogWriter.Write(ex, ExceptionHandler.LOG_CAT_GENERAL);
            }
        }

        private void btnEditUOMGroup_ButtonPressed(object sender, ButtonPressedEventArgs e)
        {
            try
            {
                UnitOfMeasureGroupDetail uomGroupDetail = grvUOMGroup.GetRow(grvUOMGroup.FocusedRowHandle) as UnitOfMeasureGroupDetail;
                currentUOMGroup = uomGroupDetail.UnitOfMeasureGroup;
                if (currentUOMGroup != null && ValidateUOMGroupBeforeEdting())
                {
                    CurrentAction = Enums.ActionForm.Edit;
                    BindDataToControls();
                    ActionChange();
                }
                return;

            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi xảy ra. Vui lòng liên hệ Người quản trị hệ thống để được hỗ trợ.");
                ExceptionHandler.LogWriter.Write(ex, ExceptionHandler.LOG_CAT_GENERAL);
            }
        }

        private void btnDeleteUOMGroup_ButtonPressed(object sender, ButtonPressedEventArgs e)
        {
            try
            {
                UnitOfMeasureGroupDetail uomGroupDetail = grvUOMGroup.GetRow(grvUOMGroup.FocusedRowHandle) as UnitOfMeasureGroupDetail;
                currentUOMGroup = uomGroupDetail.UnitOfMeasureGroup;
                if (currentUOMGroup != null && ValidateUOMGroup() == true)
                {
                    uomGroupBO.DeleteUnitOfMeasureGroup(currentUOMGroup);
                    currentUOMGroup = null;
                }
                BindUOMGroupDetailToGrid();

            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi xảy ra. Vui lòng liên hệ Người quản trị hệ thống để được hỗ trợ.");
                ExceptionHandler.LogWriter.Write(ex, ExceptionHandler.LOG_CAT_GENERAL);
            }
        }
        #endregion        
    }
}